# -*- coding: utf-8 -*-

# @author Anderson R. Livramento
# Copyright (C) 2008 Anderson Rodrigues Livramento <anderdevel@users.sourceforge.net>
#
# O conteúdo deste arquivo está disponível dentro dos termos 
# da Licença Pública Geral GNU como publicada pela 
# Fundação do Software Livre (FSF); na versão 2 da Licença, ou
# (na sua opnião) qualquer versão mais recente.
#
# Este programa é distribuído na esperança que possa ser útil,
# mas SEM NENHUMA GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a
# qualquer MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a
# Licença Pública Geral GNU para maiores detalhes.
#
# Você deve ter recebido uma cópia da Licença Pública Geral GNU, sob
# o título "LICENCA.txt", junto com este programa; se não, escreva para
# a Fundação do Software Livre(FSF) Inc., 51 Franklin St, Fifth Floor,
# Boston, MA  02110-1301  US
#
import logging

import votafam.model.votafammodel as dao

from sqlalchemy.sql import select, func, and_

from votafam.lib.base import *

log = logging.getLogger(__name__)

class ApuracaoController(BaseController):

    def index(self):
        if session.get('user') != 'admin':
            return redirect_to(controller='admin',action='index',id=None)
        vc = model.get_model('VotacaoCandidato').table
        vo = model.get_model('Votacao').table
        ca = model.get_model('Candidato').table
        mo = model.get_model('Mostra').table
        # Pegando o total de votos por Mostra em votacao
        sql = select([vo.c.cdvotacao,vo.c.cdmostra,func.sum(ca.c.qtvotos).label('qttotalvotos')],
                and_(vc.c.cdvotacao==vo.c.cdvotacao,vc.c.cdcandidato==ca.c.cdcandidato),
                group_by=vo.c.cdmostra)
        result_totalvotos = model.Session.execute(sql)
        mostra_totalvotos = {}
        for mostra in result_totalvotos:
            mostra_totalvotos[mostra[1]] = mostra[2]
        result_totalvotos.close()
        # Pegando todos os candidatos de todas Mostras em votacao, ordenando pela quantidade de votos
        sql = select([vo.c.cdvotacao,vo.c.cdmostra,mo.c.nmmostra,ca.c.nmcandidato,ca.c.qtvotos],
                and_(vc.c.cdvotacao==vo.c.cdvotacao,vc.c.cdcandidato==ca.c.cdcandidato,vo.c.cdmostra==mo.c.cdmostra),
                order_by=[vo.c.cdmostra,ca.c.qtvotos.desc()])
        result_apuracao = model.Session.execute(sql)
        c.list = []
        for candidato in result_apuracao:
            percent = (candidato[4]/(mostra_totalvotos[candidato[1]] or 1))*100
            c.list.append({
                'cdmostra':candidato[1],
                'nmmostra':candidato[2],
                'nmcandidato':candidato[3],
                'qtvotos':candidato[4],
                'percent':percent
            })
        return render('/admin/apuracao.mako')
